﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Data;
using Site_IEQ.IEQ_DAL;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;


namespace Site_IEQ
{              

    public partial class cadastro_conteudo : System.Web.UI.Page
    {
        // Contante para armazenar nome do Grupo/Depto  no ViewState
        private const string KEY_NOME_GRUPO_DEPTO = "__NOME_GRUPO_DEPTO";
        String grupo_depto;

        #region Properties

        public Boolean IsAdmin
        {
            get { return _is_admin; }
            set { _is_admin = value; }
        } private bool _is_admin;

        public String Nome_Grupo
        {
            get { return _nome_grupo; }
            set { _nome_grupo = value; }
        } private string _nome_grupo;

        public String Presidente
        {
            get { return _presidente; }
            set { _presidente = value; }
        } private string _presidente;

        public String Assessor_Nome
        {
            get { return _assessor_nome; }
            set { _assessor_nome = value; }
        } private string _assessor_nome;

        public String Assessor_Telefone
        {
            get { return _assessor_telefone; }
            set { _assessor_telefone = value; }
        } private string _assessor_telefone;

        public String Assessor_Email
        {
            get { return _assessor_email; }
            set { _assessor_email = value; }
        } private string _assessor_email;

        public String Texto_Resumido
        {
            get { return _texto_resumido; }
            set { _texto_resumido = value; }
        } private string _texto_resumido;

        public String Texto_Completo
        {
            get { return _texto_completo; }
            set { _texto_completo = value; }
        } private string _texto_completo;

        public String Dia_Reuniao
        {
            get { return _dia_reuniao; }
            set { _dia_reuniao = value; }
        } private String _dia_reuniao;

        public DateTime Hora_Inicio
        {
            get { return _hora_inicio; }
            set { _hora_inicio = value; }
        } private DateTime _hora_inicio;

        public DateTime Hora_Final
        {
            get { return _hora_final; }
            set { _hora_final = value; }
        } private DateTime _hora_final;

        public DateTime Data_Fundacao
        {
            get { return _data_fundacao; }
            set { _data_fundacao = value; }
        } private DateTime _data_fundacao;

        public Byte[] Foto
        {
            get { return _foto; }
            set { _foto = value; }
        } private Byte[] _foto;

        #endregion
        
        public String[] Dias_Semana()
        {
            string dias = "Segunda,Terça,Quarta,Quinta,Sexta,Sábado,Domingo";
            return dias.Split(',');       
        }

        public static DsGrupoDepto.IEQ_GRUPO_DEPTORow CurrentGrupoDepto
        {
            get
            {
                if (_grupo_depto_row == null)
                {
                    DsGrupoDepto.IEQ_GRUPO_DEPTODataTable dtGrupoDepto = new DsGrupoDepto.IEQ_GRUPO_DEPTODataTable();
                    return dtGrupoDepto.NewIEQ_GRUPO_DEPTORow();
                }
                else
                    return _grupo_depto_row;
            }
            set { _grupo_depto_row = value; }
        } private static DsGrupoDepto.IEQ_GRUPO_DEPTORow _grupo_depto_row;
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Nome_Grupo = Request.QueryString["GrupoDepto"];
                if (!String.IsNullOrEmpty(Nome_Grupo))
                {
                    // Seta propertie IsAdmin
                    IsAdmin = Nome_Grupo.Equals("admin");
                    InitControls();
                }
            }
            else
            {
                Nome_Grupo = Request.QueryString["GrupoDepto"];
                if (String.IsNullOrEmpty(Nome_Grupo))
                    return;
                
                // Seta propertie IsAdmin
                IsAdmin = Nome_Grupo.Equals("admin");

                if (IsAdmin)
                {
                    if (ddlGrupoDepto.SelectedIndex > 0)
                    {
                        Nome_Grupo = ddlGrupoDepto.SelectedValue;
                        ViewState.Add(KEY_NOME_GRUPO_DEPTO, Nome_Grupo);
                    }
                }
                else
                {
                    Nome_Grupo = lblGrupoDepto.Text;
                    ViewState.Add(KEY_NOME_GRUPO_DEPTO, Nome_Grupo);
                }
            }
        }

        private void InitControls()
        {
            grupo_depto = Request.QueryString["GrupoDepto"];
            
            if (String.IsNullOrEmpty(grupo_depto))
                return;

            IEQ_Data data = new IEQ_Data();
            CurrentGrupoDepto = data.GetGrupoDeptoRow(grupo_depto);

            if (IsAdmin)
            {                
                ddlGrupoDepto.Items.Clear();
                ddlGrupoDepto.Items.Add("[Selecione o nome]");
                foreach (DsGrupoDepto.IEQ_GRUPO_DEPTORow row in data.GetAllGrupoDepto().Rows)
                    ddlGrupoDepto.Items.Add(row.NOME.Trim());
            }
            lblGrupoDepto.Visible = !IsAdmin;
            ddlGrupoDepto.Visible = IsAdmin;
            lblGrupoDepto.Text = Nome_Grupo.ToUpper();
            ddlDiaReuniao.Items.Clear();
            ddlDiaReuniao.Items.Add("[Selecione o dia]");
            foreach (string dia in Dias_Semana())
                ddlDiaReuniao.Items.Add(dia);

            if (!String.IsNullOrEmpty(Nome_Grupo))
                ddlGrupoDepto.SelectedValue = Nome_Grupo;
            
            LoadControls();
        }

        private void LoadControls()
        {

            if ((!IsAdmin && !String.IsNullOrEmpty(lblGrupoDepto.Text) && CurrentGrupoDepto != null) || (IsAdmin && ddlGrupoDepto.SelectedIndex > 0 && CurrentGrupoDepto != null))
            {
                tbPresidente.Text = CurrentGrupoDepto.IsPRESIDENTENull() ? string.Empty : CurrentGrupoDepto.PRESIDENTE.Trim();
                tbAssessor.Text = CurrentGrupoDepto.IsASS_COMUN_NOMENull() ? string.Empty : CurrentGrupoDepto.ASS_COMUN_NOME.Trim();
                tbAssTelefone.Text = CurrentGrupoDepto.IsASS_COMUN_TELEFONENull() ? string.Empty : CurrentGrupoDepto.ASS_COMUN_TELEFONE.Trim();
                tbAssEmail.Text = CurrentGrupoDepto.IsASS_COMUN_EMAILNull() ? string.Empty : CurrentGrupoDepto.ASS_COMUN_EMAIL.Trim();
                tbDataFundacao.Text = CurrentGrupoDepto.IsDATA_FUNDACAONull() ? string.Empty : CurrentGrupoDepto.DATA_FUNDACAO.ToString("dd/MM/yyyy");
                ddlDiaReuniao.SelectedValue = CurrentGrupoDepto.IsDIA_REUNIAONull() ? ddlDiaReuniao.Items[0].ToString() : CurrentGrupoDepto.DIA_REUNIAO.Trim();
                tbHoraInicio.Text = CurrentGrupoDepto.IsHORA_REUNIAO_INICIONull() ? string.Empty : CurrentGrupoDepto.HORA_REUNIAO_INICIO.ToString("HH:mm");
                tbHoraFinal.Text = CurrentGrupoDepto.IsHORA_REUNIAO_FINALNull() ? string.Empty : CurrentGrupoDepto.HORA_REUNIAO_FINAL.ToString("HH:mm");
                TextResumido.Text = CurrentGrupoDepto.IsDESCRICAO_RESUMIDANull() ? string.Empty : CurrentGrupoDepto.DESCRICAO_RESUMIDA.Trim();
                TextCompleto.Text = CurrentGrupoDepto.IsDESCRICAO_COMPLETANull() ? string.Empty : CurrentGrupoDepto.DESCRICAO_COMPLETA.Trim();
                LoadFotoGrupoDepto(Nome_Grupo);
            }
            else
            {
                tbPresidente.Text = string.Empty;
                tbAssessor.Text = string.Empty;
                tbAssTelefone.Text = string.Empty;
                tbAssEmail.Text = string.Empty;
                tbDataFundacao.Text = string.Empty;
                ddlDiaReuniao.SelectedIndex = 0;
                tbHoraInicio.Text = string.Empty;
                tbHoraFinal.Text = string.Empty;
                TextResumido.Text = string.Empty;
                TextCompleto.Text = string.Empty;
                imgFoto.Visible = true;
            }
        }

        private void LoadFotoGrupoDepto(string nome)
        {
            String urlImage = string.Empty;
            String path = "C://Users//Wendel//documents//visual studio 2010//Projects//Site_IEQ//Site_IEQ//images//";// Resource.ImagesPath;
            String pathUrl = "../images/";//Resource.ImagesPathUrl;
            Double Tamanho_Width, Tamanho_Height;
                
            DsGrupoDepto.IEQ_GRUPO_DEPTORow row = CurrentGrupoDepto;

            if (!row.IsFOTO_APRESENTACAONull() && row.FOTO_APRESENTACAO.Length > 0)
            {
                try
                {
                    MemoryStream ms = new MemoryStream(row.FOTO_APRESENTACAO);
                    System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
                    ImageFormat contentType = ImageHelper.GetContentType(row.FOTO_APRESENTACAO);
                    path += "grupos_departamentos//img_home//" + Nome_Grupo + contentType.ToString();
                    
                    FileStream fs= new FileStream(path, FileMode.Create, FileAccess.ReadWrite);                    
                    fs.Write(row.FOTO_APRESENTACAO, 0, row.FOTO_APRESENTACAO.Length);
                    fs.Close();
                    
                    pathUrl += "grupos_departamentos/img_home/" + Nome_Grupo + ".jpg";
                    imgFoto.ImageUrl = pathUrl;

                    
                    imgFoto.Width = System.Web.UI.WebControls.Unit.Pixel(256);
                    imgFoto.Height = System.Web.UI.WebControls.Unit.Pixel(256);
                                        
                    // Luiz - 21.02.2011 - 23:20
                    // ajusta o tamanho da foto proporcionalmente

                    Tamanho_Width = imgFoto.Width.Value;
                    Tamanho_Height = imgFoto.Height.Value;
                   
                    if ((Tamanho_Width>256)|(Tamanho_Height>256))
                        {
                            while ((Tamanho_Width>256)|(Tamanho_Height>256))
                            {
                               Tamanho_Width=Tamanho_Width-5;
                               Tamanho_Height=Tamanho_Height-5;
                            }
                            System.Web.UI.WebControls.Unit.Pixel((int)(Tamanho_Height));
                            System.Web.UI.WebControls.Unit.Pixel((int)(Tamanho_Width));
                            // Fim interferencia Luiz - 22.02.2011 - 00:15
                        }
                     
                    
                    imgFoto.Visible = true;
                }
                catch (Exception ex)
                {
                    LoadImageNotFound();
                }
            }
            else
            {
                LoadImageNotFound();
            }
        }

        private void LoadImageNotFound()
        {
            imgFoto.ImageUrl = "/images/icones/not_image.png";
            imgFoto.Width = System.Web.UI.WebControls.Unit.Pixel(120);
            imgFoto.Height = System.Web.UI.WebControls.Unit.Pixel(120);
            imgFoto.Visible = true;
        }

        private bool UploadFoto()
        {
            bool save = false;
            bool validExtension = false;
            string[] validExtensions = { ".png", ".jpg", ".gif", ".jpeg", ".bmp" };

            // Verifica se o arquivo foi selecionado
            if (FileUploadFoto.HasFile)
            {
                try
                {
                    string extensionFile = Path.GetExtension(FileUploadFoto.FileName);
                    foreach (string extension in validExtensions)
                        if (extensionFile == extension)
                            validExtension = true;

                    if (validExtension)
                    {
                        HttpPostedFile File = FileUploadFoto.PostedFile;
                        BinaryReader binRead = new BinaryReader(File.InputStream);
                        byte[] data = binRead.ReadBytes(File.ContentLength);
                        Foto = data;
                        save = true;
                    }
                    else
                    {
                        lblValidation.Text = String.Format("O tipo da imagem selecionada não é suportada: {0}", extensionFile);
                        lblValidation.Visible = true;
                    }
                }
                catch (Exception ex)
                {
                    lblValidation.Text = "Erro ao salvar imagem.";
                    lblValidation.Visible = true;
                }
            }
            else
            {
                // Nao foi selecionado arquivo
                // Abrir Message Box
            }

            return save;
        }

        private Boolean ValidateControls()
        {
            lblValidation.Visible = false;

            DateTime hora;
            if (IsAdmin && ddlGrupoDepto.SelectedIndex == -1)
            {
                lblValidation.Text = "É necessário selecionar um grupo/departamento";
                lblValidation.Visible = true;
                ddlGrupoDepto.Focus();
                return false;
            }
            else if (String.IsNullOrEmpty(tbPresidente.Text))
            {
                lblValidation.Text = "É necessário informar o nome do Presidente.";
                lblValidation.Visible = true;
                tbPresidente.Focus();
                return false;
            }
            else if (String.IsNullOrEmpty(tbAssessor.Text))
            {
                lblValidation.Text = "É necessário informar o nome do Assessor de Comunicação.";
                lblValidation.Visible = true;
                tbAssessor.Focus();
                return false;
            }
            else if (String.IsNullOrEmpty(tbAssEmail.Text))
            {
                lblValidation.Text = "É necessário informar o Email do Assessor de Comunicação.";
                lblValidation.Visible = true;
                tbAssEmail.Focus();
                return false;
            }
            else if (String.IsNullOrEmpty(tbAssTelefone.Text))
            {
                lblValidation.Text = "É necessário informar o telefone do Assessor de Comunicação.";
                lblValidation.Visible = true;
                tbAssTelefone.Focus();
                return false;
            }
            else if (ddlDiaReuniao.SelectedIndex == -1)
            {
                //lblValidation.Text = "É necessário informar o dia da reunião oficial.";
                //lblValidation.Visible = true;
                //return false;
            }
            else if (!DateTime.TryParse(tbHoraInicio.Text, out hora))
            {
                if (ddlDiaReuniao.SelectedIndex > 0)
                {
                    lblValidation.Text = String.Format("É necessário informar o horário de início da reunião oficial no(a) {0}.", ddlDiaReuniao.SelectedValue);
                    lblValidation.Visible = true;
                    tbHoraInicio.Focus();
                    return false;
                }                
            }
            else if (!DateTime.TryParse(tbHoraFinal.Text, out hora))
            {
                if (ddlDiaReuniao.SelectedIndex > 0)
                {
                    lblValidation.Text = String.Format("É necessário informar o horário de início da reunião oficial no(a) {0}.", ddlDiaReuniao.SelectedValue);
                    lblValidation.Visible = true;
                    tbHoraFinal.Focus();                    
                    return false;
                }              
            }
            else if (String.IsNullOrEmpty(TextResumido.Text))
            {
                lblValidation.Text = "O texto resumido não foi cadastrado.";
                lblValidation.Visible = true;
                TextResumido.Focus();
                return false;
            }
            else if (String.IsNullOrEmpty(TextCompleto.Text))
            {
                lblValidation.Text = "O texto completo não foi cadastrado.";
                lblValidation.Visible = true;
                TextCompleto.Focus();
                return false;

            }
            else if (!UploadFoto())
            {
                lblValidation.Text = "A foto não foi cadastrada.";
                lblValidation.Visible = true;
                return false;
            }

            if (IsAdmin)
                Nome_Grupo = ddlGrupoDepto.Text.Trim();
            else
                Nome_Grupo = lblGrupoDepto.Text;

            Presidente = tbPresidente.Text;
            Data_Fundacao = DateTime.Parse(tbDataFundacao.Text);
            Assessor_Nome = tbAssessor.Text;
            Assessor_Telefone = tbAssTelefone.Text;
            Assessor_Email = tbAssEmail.Text;
            Dia_Reuniao = ddlDiaReuniao.Text;
            Hora_Inicio = DateTime.Parse(tbHoraInicio.Text);
            Hora_Final = DateTime.Parse(tbHoraFinal.Text);
            Texto_Resumido = TextResumido.Text.Trim();
            Texto_Completo = TextCompleto.Text.Trim();

            return true;

        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (!ValidateControls())
                return;

            IEQ_Data data = new IEQ_Data();
            IEQ_DAL.DsGrupoDeptoTableAdapters.IEQ_GRUPO_DEPTOTableAdapter da = new IEQ_DAL.DsGrupoDeptoTableAdapters.IEQ_GRUPO_DEPTOTableAdapter();
            DsGrupoDepto.IEQ_GRUPO_DEPTODataTable dtGrupoDepto = da.GetDataByNome(Nome_Grupo);
            DsGrupoDepto.IEQ_GRUPO_DEPTORow row = dtGrupoDepto.FindByID_GRUPO_DEPTO(CurrentGrupoDepto.ID_GRUPO_DEPTO);
            if (row != null)
            {
                row.NOME = Nome_Grupo;
                row.PRESIDENTE = Presidente;
                row.DATA_FUNDACAO = Data_Fundacao;
                row.ASS_COMUN_NOME = Assessor_Nome;
                row.ASS_COMUN_TELEFONE = Assessor_Telefone;
                row.ASS_COMUN_EMAIL = Assessor_Email;
                row.DESCRICAO_RESUMIDA = Texto_Resumido;
                row.DESCRICAO_COMPLETA = Texto_Completo;
                row.DIA_REUNIAO = Dia_Reuniao;
                row.HORA_REUNIAO_INICIO = Hora_Inicio.TimeOfDay;
                row.HORA_REUNIAO_FINAL = Hora_Final.TimeOfDay;
                row.FOTO_APRESENTACAO = Foto;
                row.APROVADO = false;

                data.UpdateGrupoDpto(dtGrupoDepto);
            }
        }

        protected void ddlGrupoDepto_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (ViewState[KEY_NOME_GRUPO_DEPTO] == null)
                    ViewState.Add(KEY_NOME_GRUPO_DEPTO, ddlGrupoDepto.SelectedValue);
            }
            else
            {
                LoadControls();
            }
        }
    }
}